159. RBAC基本分析
前言
RBAC這東西很久前就知道了,但一直沒實際去驗證過。
最近看istio ambient,看到他用L4的方式管理SA角色誰可以呼叫誰,
才又跑去認真看了一次。
正文
一個標準的Role通常長得像這樣
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] # "" 標明 core API 組
resources: ["volumesnapshots"]
verbs: ["get", "watch", "list"]
rules 分成下面三個部分
如果要最高權限的話就是用 *
代替,
但切記勿亂用。
apiGroups
apiGroups每個資源名稱所代表的apiGroups都不一樣。
執行 kubectl api-resources
觀察APIVERSION的欄位,
像 bindings
的APIVERSION 是 v1
的話代表是核心,所以 apiGroups: [""]
而allowlistedworkloads
的APIVERSION是auto.gke.io/v1
,所以apiGroups: ["auto.gke.io"]
p.s namespace代表這個resource是不是全域資源,需不需要指定namespace來使用
resources
上面有提到每個resource有指定的APIGroups,
這邊就比較簡單,只要將上面指令查到的NAME拿來用就好。
注意,不是後面的kind。
verb
查詢所有的resouce
kubectl api-resources --sort-by name -o wide
在你要選擇的資源內,用[ ]
包起來的表示為此resouce的可以接受哪些動作。
在K8s裏面透過RBAC管理這個角色可以對這個resouce做什麼,
對照表,參考
動作 | verb | 說明 |
---|---|---|
讀取 | get |
取得單一資源的詳細資訊 |
讀取 | list |
列出資源清單 |
讀取 | watch |
持續監聽資源變化 |
寫入 | create |
創建新資源 |
修改 | update |
修改現有資源 |
修改 | patch |
局部修改 (使用 kubectl patch ) |
刪除 | delete |
刪除資源 |
刪除 | deletecollection |
批量刪除資源 |
put 與 patch的差別在於,如果只有單一個資料要更新的話,使用patch ,所有資料都要更新的話用put
ref.
- ChatGPT
統整
設定的流程,會先指定role 可以對哪些資源做些什麼操作。
然後使用rolebinding,來指定這個role與user/group
設定完使用者後,要綁到deploy上面 ,
要在template.spec底下寫 serviceAccountName
template:
metadata:
labels:
app: filebeat
spec:
serviceAccountName: filebeat
pod有使用這個sa的話,那token會在下面的這個位置
/var/run/secrets/kubernetes.io/serviceaccount/token
ref.